# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import pymysql

# 将数据存储在MongoDB需要安装pymongo pip install pymongo
import pymongo
class CaipiaoPipeline:
    # 在数据存储过程中，每一条数据都需要执行一次方法，多条数据存储的过程中，需要频繁的操作文件，IO消耗资源较大
    # 若可以在文件数据写入前将文件打开，在数据写入完毕后将文件关闭
    # open_spider在process_item之前进行自动调用执行
    def open_spider(self, spider):
        # 打开文件
        self.file=open("shuangseqiu.csv","a",encoding="UTF-8")
        pass

    # close_spider在process_item之后进行自动调用执行
    def close_spider(self, spider):
        # 关闭文件
        self.file.close()
        pass

    def process_item(self, item, spider):
        # 将数据写入文件中，其中红球内容使用_进行拼接
        self.file.write(f"{item["qihao"]},{"_".join(item["red_ball"])},{item["blue_ball"]}\n")
        return item
class CaipiaoMYSQLPipeline:
    # 将数据保存在本地的数据库中
    def open_spider(self, spider):
        # 创建数据库连接
        self.conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",db="pythonspider")
        pass
    def close_spider(self, spider):
        # 关闭数据库连接
        self.conn.close()
        pass

    def process_item(self, item, spider):
        # 创建游标
        cursor=self.conn.cursor()
        # 准备要执行的sql语句，不是确定的值 用%s进行占位
        sql="INSERT INTO caipiao(qihao,red_ball,blue_ball) VALUES(%s,%s,%s)"
        # 将字符串进行拼接，（挨个取出红球中的每个数字，数字键用，号进行拼接）
        redball=",".join(item["red_ball"])
        # 执行sql语句，指定占位符输入的具体数据内容
        cursor.execute(sql,(item["qihao"],redball,item["blue_ball"]))
        # 进行事务提交
        self.conn.commit()
        return item

class CaipiaoMongoDBPipeline:
    # 将数据保存在本地的数据库中
    def open_spider(self, spider):
        # 创建数据库连接
        # host:要连接的ip localhost表示本机  port是端口号，mongoDB的端口默认是27017
        self.conn=pymongo.MongoClient(host="localhost",port=27017)
        # 指定要使用的库
        self.db=self.conn["python03"]
        # 指定使用的集合
        self.collection=self.db["caipiao"]
        pass
    def close_spider(self, spider):
        # 关闭数据库连接
        self.conn.close()
        pass

    def process_item(self, item, spider):
        # 将数据保存在mongoDB中
        self.collection.insert_one({"qihao":item["qihao"],"red_ball":item["red_ball"],"blue_ball":item["blue_ball"]})
        return item